package hos.nav;

import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.Uri;


import java.util.List;

/**
 * <p>Title: LocationNavUtils </p>
 * <p>Description:  </p>
 * <p>Company: www.mapuni.com </p>
 *
 * @author : 蔡俊峰
 * @version : 1.0
 * @date : 2020/10/19 9:31
 */

public class LocationNavUtils {

    /**
     * 判断手机中是否有百度app
     */
    public static boolean isNavigationApkBaiDu(Context context) {
        return isNavigationApk(context, "com.baidu.BaiduMap");
    }

    /**
     * 判断手机中是否有高德app
     */
    public static boolean isNavigationApkAMap(Context context) {
        return isNavigationApk(context, "com.autonavi.minimap");
    }

    /**
     * 判断手机中是否有腾讯地图app
     */
    public static boolean isNavigationApkQQMap(Context context) {
        return isNavigationApk(context, "com.tencent.map");
    }

    /**
     * 判断手机中是否有导航app
     *
     * @param packageName 包名
     */
    public static boolean isNavigationApk(Context context, String packageName) {
        PackageManager manager = context.getPackageManager();
        if (manager == null) {
            return false;
        }
        List<PackageInfo> packages = manager.getInstalledPackages(0);
        for (int i = 0; i < packages.size(); i++) {
            PackageInfo packageInfo = packages.get(i);
            if (packageInfo.packageName.equals(packageName)) {
                return true;
            }
        }
        return false;
    }

    public static boolean launchMarketBaiDu(Context context) {
        return launchMarket(context, "com.baidu.BaiduMap");
    }

    public static boolean launchMarketAMap(Context context) {
        return launchMarket(context, "com.autonavi.minimap");
    }

    public static boolean launchMarketQQMap(Context context) {
        return launchMarket(context, "com.tencent.map");
    }

    public static boolean launchMarket(Context context, String packageName) {
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageName));
        // 是为了 使用applicaiton  context 启动activity 不会报错
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        try {
            context.startActivity(intent);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    public static void launchMap(Context context, String url) {
        Intent intent = new Intent();
        if (url.contains("uniapp")) {
            url = url.replace("uniapp", context.getPackageName());
        }
        intent.setData(Uri.parse(url));
        // 是为了 使用applicaiton  context 启动activity 不会报错
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent);
    }

    public static boolean shouldOverrideUrlLoading(Context context, String url) {
        if (url == null) {
            return false;
        }
        if (url.startsWith("androidamap://")) {
            // 判断高德地图是否存在
            if (LocationNavUtils.isNavigationApkAMap(context)) {
                // 存在高德地图，打开地图导航
                LocationNavUtils.launchMap(context, url);
                return true;
            }
            // 不存在高德地图，去应用市场下载
            LocationNavUtils.launchMarketAMap(context);
            return true;
        }
        if (url.startsWith("baidumap://")) {
            // 判断百度地图是否存在
            if (LocationNavUtils.isNavigationApkBaiDu(context)) {
                // 存在百度地图，打开地图导航
                LocationNavUtils.launchMap(context, url);
                return true;
            }
            // 不存在百度地图，去应用市场下载
            LocationNavUtils.launchMarketBaiDu(context);
            return true;
        }
        if (url.startsWith("qqmap://")) {
            // 判断腾讯地图是否存在
            if (LocationNavUtils.isNavigationApkQQMap(context)) {
                // 存在腾讯地图，打开地图导航
                LocationNavUtils.launchMap(context, url);
                return true;
            }
            // 不存在腾讯地图，去应用市场下载
            LocationNavUtils.launchMarketQQMap(context);
            return true;
        }
        return false;
    }

}
